Logo

Lumen Framework

Heute möchte ich etwas über das Lumen Framework [1] berichten und welche Erfahrungen ich in den letzten Wochen mit diesem Framework gemacht habe.

Zu Beginn möchte ich kurz auf die Rahmenbedingungen eingehen unter denen ich mich für das Framework entschieden habe. Ich habe eine Framework gesucht um schnell eine REST API [2] umsetzen zu können. Wichtig war mir das nicht zu viel unnötiger Code geladen wird, das System also entsprechend schnell reagieren wird sowie eine Lösung deren Support nicht morgen von der Community eingestellt wird.

Nach einem kleinen Testprojekt in unterschiedlichen Frameworks war meine Entscheidung recht schnell getroffen und ist auf Lumen gefllenn. Die Gründe hierfür waren einfach:

  • Die Nutzung war für mich sehr intuitiv - was natürlich absolut subjektiv ist.
  • Es ist eines der schnellsten Frameworks am Markt für REST APIs.
  • Hinter Lumen steht Laravel, der Support sollte damit recht verlässlich sein.
  • Wem die Features von Lumen nicht reichen kann den Code 1:1 in Laravel überführen und alle Funktionen von Laravel nutzen.
  • Die Dokumentation des Frameworks ist gut, wenn auch nicht überragend, da oft Teile der Laravel Dokumentation greifen, die Funktionen aber nicht immer zu 100% abdecken.
  • Es gibt massig Tutorials und Community Support wenn mal was klemmt.

Im Detail

Hinweis: alle bereitgestellten Informationen beziehen sich auch Lumen in Version 5.5 sowie Laravel 5.5. Neue Versionen mögen einzelen Features nicht mehr unterstützen oder durch andere Pakete bereitstellen.

Funktionen

Im Kern bietet Lumen alles was man für eine schnelle API braucht. Das klassische MVC Pattern ist leicht verständlich umgesetzt und bietet auch Anfängern eine klare und einfache Struktur. Lumen macht es einem also denkbar einfach in den Bereich Frameworks und hier insbesondere Microframeworks einzusteigen.

Die für mich wichtigsten Punkte, die Lumen von Haus aus mitbringt, sind Datenbankverwaltung, Userverwaltung, Logging, Routing und Cronjobs. Hier mag jeder seine Schwerpunkte etwas anders setzen, aber ich denke das bei jeder API die fünf genannten Punkte eine Rolle spielen.

Wem diese Funktionen nicht reichen, oder wer im Laufe der Entwicklung merkt das seine API umfangreichere Anforderungen hat, kann bei Lumen jederzeit auf Laravel "upgraden" und somit den vollen Funktionsumfang eines der größten und bekanntesten Frameworks für PHP nutzen. Für mich ein weitere Bonuspunkt auf der Liste.

Lumen und die Datenbank

Lumen bietet mit Eloquent [3] eine Active Record Implementation zur Interaktion mit der Datenbank. Jedes Model interagiert mit einer Tabelle gleichen Namen in der Datenbank. Das macht eine Umsetzung des klassischen CRUD Models denkbar einfach.

Als Microframework ist Lumen primär auf simple Aktionen ausgelegt, was wiederum nicht heißen soll das komplexe Vorgänge nicht abbildbar sind, es wird nur eben zeitlich aufwändiger. Wer beispielsweise über mehere Tabellen joinen möchte, der muss zunächst die Abhängigkeiten der Tabellen untereinander differenziert beschreiben oder aber durch kleine Tricks wie stored procedures Elquent an diesen Stellen umgehen. Was hier das Mittel der Wahl ist muss jeder selber entscheiden.

Userverwaltung

Bereits von Haus aus bietet Lumen mit seinen Beispielklassen eine rudimentäre Userverwaltung an. Viele Anwednungsfälle werden bereits hiervon abgedeckt, wem das aber nicht reicht und Dinge wie OAuth oder Ähnliches wichtig sind, der kann sich mit Passport die entsprechenden Funktionalitäten in seine Applikation laden. Infos zum Paket findet ihr hier [4]

Logging

Beim Logging steht euch nach der Installation von Lumen sofort Monolog [5] zur Verfügung, je nach Anwednungsfall kann die Konfiguration angepasst werden um die Logs an Files, Datenbanken oder beispielsweise Mailaccounts zu senden. Auch das Anpassen der zu sammelnden Daten ist denkbar einfach und bietet so eine einfache Möglichkeit allte wichtigen Informationen der eigenen App sauber zu loggen ohne hier übermäßig viel Aufwand in entsprechende Klassen stecken zu müssen.

Routing

Das Routing gestaltet sich Alles in Allem sehr einfach. Global werden alle Aufrufe über eine zentrale Datei gesteuert, der web.php. Darüber hinaus lassen sich sehr einfach unterschiedliche Aufrufe in Gruppen mit eigenem Prefix und unterschiedlichen Middleware Aufrufen definieren. Was sehr zur Übersichtlichkeit im Code beiträgt.

Wem das Konzept von Middleware unbekannt ist, hierbei handelt es sich im Groben um eine Verwaltungsschicht, die jedem Aufruf, vor der eigentlichen Verarbeitung, vorgelagert wird. Beispielsweise die Validierung der übermittelten Daten auf ein spezielles Format, oder aber Authorisierung von Nutzern.

Cronjobs

Bei den Cronjobs wird es einem Entwickler sehr einfach gemacht. Der eigentliche Handler wird beispielsweise in Ubuntu im Crontab eingetragen und dann automatisch vom Betriebsystem jede Minute getriggert. Der eigentliche Cronjob kann dann als eigene Datei im Lumen System hinterlegt werden und wird nur durch die Konfiguration im Handler ausgelöst.

So kann dann, ohne weitere Konfigurationen anzupassen, die Ausführungszeit der einzelnen Jobs jederzeit im Handler angepasst werden um so beispielsweise jeden Wochentag um 13:00 Uhr ausgelöst zu werden.

Auch komplexere Systeme sind hier bedacht worden, so lassen sich Cronjobs so konfigurieren das nur eine Maschine, von beliebig vielen, den Cronjob ausführt und Überlappungen vom Handler verhindert werden.

Weiterführende Links:

[1] Lumen Framework - https://lumen.laravel.com/ 2018-03-15 12:00 MEZ

[2] REST API Wikipedia - https://de.wikipedia.org/wiki/Representational_State_Transfer/ 2018-03-15 12:00 MEZ

[3] Eloquent - https://laravel.com/docs/5.6/eloquent 2018-04-25 12:00 MEZ

[4] Passport - https://github.com/dusterio/lumen-passport 2018-05-04 12:00 MEZ

[5] Monolog - https://github.com/seldaek/monolog 2018-04-25 12:00 MEZ